package ar.edu.utn.frba.disenio.aterrizar;

import com.lanchita.*;
import static org.mockito.Mockito.*;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.ArrayList;

public class LanchitaMockTest {

	Usuario usuarioEstandar = new UsuarioEstandar("Juan","Perez","123456");
	Usuario usuarioVip = new UsuarioVip("Laura","Rodriguez","9877654");
	Usuario usuarioNoPaga = new UsuarioNoPaga("Pepe","Argento","567842");
	AerolineaLanchita mockAerolineaLanchita = mock(AerolineaLanchita.class);
	AerolineaLanchita mockitoLanchita = mockAerolineaLanchita.getInstance();
	
	@Test
	public void testResultadosBusquedaVip(){
		usuarioVip.buscarVuelos(mockitoLanchita, "BUE", "LA", "20121010");
		for(ArrayList<Vuelo> unaBusqueda : usuarioVip.getBusquedas()){
			assertTrue(unaBusqueda.size()==10);			
		}		
	}
	
	@Test
	public void testResultadosBusquedaEstandar(){
		usuarioEstandar.buscarVuelos(mockitoLanchita, "BUE", "LA", "20121010");
		for(ArrayList<Vuelo> unaBusqueda : usuarioEstandar.getBusquedas()){
			assertTrue(unaBusqueda.size()==3);
		}
	}
	
	@Test
	public void testResultadosBusquedaNoPaga(){
		usuarioNoPaga.buscarVuelos(mockitoLanchita, "BUE", "LA", "20121010");
		for(ArrayList<Vuelo> unaBusqueda : usuarioNoPaga.getBusquedas()){
			assertTrue(unaBusqueda.size()==3);
		}
	}
	
	@Test
	public void testValorDeAsientoVip(){
		Busqueda unaBusqueda = new Busqueda();
		double precio = Double.parseDouble(unaBusqueda.buscarVueloParticular(mockitoLanchita, "01202022220202-3", usuarioVip).valor);
		assertTrue( precio == 183.885);
	}
	
	@Test
	public void testValorDeAsientoEstandar(){
		Busqueda unaBusqueda = new Busqueda();
		double precio = Double.parseDouble(unaBusqueda.buscarVueloParticular(mockitoLanchita, "01202022220202-3", usuarioEstandar).valor);
		assertTrue( precio == 183.885);
	}
	
	@Test
	public void testValorDeAsientoNoPaga(){
		Busqueda unaBusqueda = new Busqueda();
		double precio = Double.parseDouble(unaBusqueda.buscarVueloParticular(mockitoLanchita, "01202022220202-3", usuarioNoPaga).valor);
		assertTrue(precio == 203.885);
	}
	
	@Test
	public void testCompraAsientoErroneo() {
		usuarioVip.comprarAsiento(mockitoLanchita, "asdlkajfg5646mvad");
	}
	
	@Test(expected = AsientoErroneoException.class)
	public void testCompraAsientoExitoso() {
		Busqueda unaBusqueda = new Busqueda();
		usuarioVip.comprarAsiento(mockitoLanchita, "01202022220202-3");
		unaBusqueda.buscarVueloParticular(mockitoLanchita, "01202022220202-3", usuarioVip);
	}
}
